QuickCheck is a library for random testing of program properties.

The programmer provides a specification of the program, in the form
of properties which functions should satisfy, and QuickCheck then
tests that the properties hold in a large number of randomly generated
cases.

Specifications are expressed in Haskell, using combinators defined
in the QuickCheck library.  QuickCheck provides combinators to
define properties, observe the distribution of test data, and define
test data generators.
